package com.summer.bilibili.util;

import java.util.Random;

/**
 * 数学工具类
 * 提供常用的数学计算辅助方法
 */
public class MathUtils {
    /**
     * 将整数值限制在指定范围内 [min, max]
     *
     * @param num 待校验的数值
     * @param min 允许的最小值（包含）
     * @param max 允许的最大值（包含）
     * @return 若num小于min返回min，大于max返回max，否则返回原值
     */
    public static int clamp ( int num , int min , int max ) {
        if ( num < min ) {
            return min;
        } else if ( num > max ) {
            return max;
        }
        return num;
    }

    /**
     * 将长整数值限制在指定范围内 [min, max]
     *
     * @param num 待校验的数值
     * @param min 允许的最小值（包含）
     * @param max 允许的最大值（包含）
     * @return 若num小于min返回min，大于max返回max，否则返回原值
     */
    public static long clamp ( long num , long min , long max ) {
        if ( num < min ) {
            return min;
        } else if ( num > max ) {
            return max;
        }
        return num;
    }

    /**
     * 将浮点数值限制在指定范围内 [min, max]
     *
     * @param num 待校验的数值
     * @param min 允许的最小值（包含）
     * @param max 允许的最大值（包含）
     * @return 若num小于min返回min，大于max返回max，否则返回原值
     */
    public static float clamp ( float num , float min , float max ) {
        if ( num < min ) {
            return min;
        } else if ( num > max ) {
            return max;
        }
        return num;
    }

    /**
     * 生成指定范围内的随机整数 [min, max]
     *
     * @param min 随机数下限（包含）
     * @param max 随机数上限（包含）
     * @return 生成的随机整数
     */
    public static int randomInt ( int min , int max ) {
        Random random = new Random ( );
        // 公式: min + [0, (max-min)] 的随机整数
        return min + random.nextInt ( max - min + 1 );
    }
}
